package br.com.toscano.gobra.domain;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;

@Entity 
@Table(name="ADITIVO")
public class Aditivo  extends ObjetoAbstrato {

	private static final long serialVersionUID = 13454532143354511L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="ADIT_ID")
	private Long id;

	@ManyToOne(fetch = FetchType.LAZY, optional = false)
	@JoinColumn(name = "LIEM_ID")
	private Licitacao licitacao;

	@ManyToOne(fetch = FetchType.LAZY, optional = false)
	@JoinColumn(name = "TPAR_ID")
	private TipoART tipoArt;
	
	@Column(name="ADIT_NUMERO_ART", nullable=false, length=255)
	private String numeroArt;

	@Column(name = "ADIT_VALIDADE_ADITIVO", length = 7, nullable = false)
	private Date valiadeArt;

	@Column(name="ADIT_NUMERO_ADITIVO", nullable=false, length=255)
	private String numeroAditivo;

	@Column(name="ADIT_MOTIVO", nullable=false, length=255)
	private String motivoAditivo;

	@Column(name = "ADIT_DATA_ADITIVO", length = 7, nullable = false)
	private Date dataAditivo;

	@Column(name = "ADIT_QTD_ITENS", nullable = false, precision = 19, scale = 2)
	private BigDecimal quantidadeItens;

	@Column(name = "ADIT_VALOR_ADITIVO", nullable = false, precision = 19, scale = 2)
	private BigDecimal valorAditivo;
	
	@Column(name = "ADIT_QTD_DIAS", precision = 4, scale = 0)
	private Long quantidadeDias;

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "aditivo", orphanRemoval = true)
	@Cascade(value={org.hibernate.annotations.CascadeType.PERSIST, org.hibernate.annotations.CascadeType.MERGE})
	private List<ItemTabelaPrecoLicitacaoAditivo> listaItemTabelaPrecoLicitacaoAditivo = new ArrayList<ItemTabelaPrecoLicitacaoAditivo>();


	public int hashCode() {
		StringBuffer sb = new StringBuffer();
		
		sb.append(this.getId());
		
		return sb.toString().hashCode();
	}
	
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Aditivo other = (Aditivo) obj;
		 if ((id == null && other.id == null) || (id == 0 && other.id == 0)) {
				return licitacao != null && licitacao.equals(other.licitacao) && ((valorAditivo != null && valorAditivo.equals(other.valorAditivo)) && (dataAditivo != null && dataAditivo.equals(other.dataAditivo) ));
		}else if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id)) {
			return false;
		}
		return true;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Licitacao getLicitacao() {
		return licitacao;
	}

	public void setLicitacao(Licitacao licitacao) {
		this.licitacao = licitacao;
	}

	public TipoART getTipoArt() {
		return tipoArt;
	}

	public void setTipoArt(TipoART tipoArt) {
		this.tipoArt = tipoArt;
	}

	public String getNumeroArt() {
		return numeroArt;
	}

	public void setNumeroArt(String numeroArt) {
		this.numeroArt = numeroArt;
	}

	public Date getValiadeArt() {
		return valiadeArt;
	}

	public void setValiadeArt(Date valiadeArt) {
		this.valiadeArt = valiadeArt;
	}

	public String getNumeroAditivo() {
		return numeroAditivo;
	}

	public void setNumeroAditivo(String numeroAditivo) {
		this.numeroAditivo = numeroAditivo;
	}

	public String getMotivoAditivo() {
		return motivoAditivo;
	}

	public void setMotivoAditivo(String motivoAditivo) {
		this.motivoAditivo = motivoAditivo;
	}

	public Date getDataAditivo() {
		return dataAditivo;
	}

	public void setDataAditivo(Date dataAditivo) {
		this.dataAditivo = dataAditivo;
	}

	public BigDecimal getQuantidadeItens() {
		return quantidadeItens;
	}

	public void setQuantidadeItens(BigDecimal quantidadeItens) {
		this.quantidadeItens = quantidadeItens;
	}

	public BigDecimal getValorAditivo() {
		return valorAditivo;
	}

	public void setValorAditivo(BigDecimal valorAditivo) {
		this.valorAditivo = valorAditivo;
	}

	public Long getQuantidadeDias() {
		return quantidadeDias;
	}

	public void setQuantidadeDias(Long quantidadeDias) {
		this.quantidadeDias = quantidadeDias;
	}

	public List<ItemTabelaPrecoLicitacaoAditivo> getListaItemTabelaPrecoLicitacaoAditivo() {
		return listaItemTabelaPrecoLicitacaoAditivo;
	}

	public void setListaItemTabelaPrecoLicitacaoAditivo(
			List<ItemTabelaPrecoLicitacaoAditivo> listaItemTabelaPrecoLicitacaoAditivo) {
		this.listaItemTabelaPrecoLicitacaoAditivo = listaItemTabelaPrecoLicitacaoAditivo;
	}
}